iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
2
Software Development

Android animation 30天上手系列 第 28

Day28 MotionLayout KeyframeSet

  • 分享至 

  • xImage
  •  

我們在講Property animation有講過keyFrame,這裡也可以使用keyFrameSet。

KeyFrameSet 裡可以設定

KeyPosition 位置的變化
KeyCycle 振盪效果
KeyAttribute 屬性的變化

KeyPosition
設定動畫在50%時,Y的位置往上移動25%

KeyPosition

<Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@+id/start"
        motion:duration="1000">
    <OnSwipe
            motion:touchAnchorId="@+id/button"
            motion:touchAnchorSide="right"
            motion:dragDirection="dragRight"/>
    <KeyFrameSet>
        <KeyPosition
                motion:keyPositionType="pathRelative"
                motion:percentY="-0.25"
                motion:framePosition="50"
                motion:target="@id/button"/>
    </KeyFrameSet>

</Transition>

再加3個keyPosition

3keyPosition

<KeyFrameSet>
    <KeyPosition
            motion:keyPositionType="pathRelative"
            motion:percentY="-0.25"
            motion:framePosition="25"
            motion:target="@id/button"/>
    <KeyPosition
            motion:keyPositionType="pathRelative"
            motion:percentY="0.25"
            motion:framePosition="50"
            motion:target="@id/button"/>
    <KeyPosition
            motion:keyPositionType="pathRelative"
            motion:percentY="-0.25"
            motion:framePosition="75"
            motion:target="@id/button"/>
</KeyFrameSet>

加上KeyCycle 產生振盪

KeyCycle

<KeyFrameSet>
    <KeyCycle
        android:rotation="25"
        motion:framePosition="50"
        motion:target="@+id/button"
        motion:wavePeriod="1"
        motion:waveShape="sin" />
</KeyFrameSet>

KeyCycle加上KeyAttribute放大2倍

Keycycle_KeyAttribute

<KeyFrameSet>
    <KeyCycle
        android:rotation="25"
        motion:framePosition="25"
        motion:target="@+id/button"
        motion:wavePeriod="1"
        motion:waveShape="sin" />
    <KeyAttribute
        motion:target="@id/button"
        android:scaleX="2"
        android:scaleY="2"
        motion:framePosition="50" />
</KeyFrameSet>

KeyAttribute 支援的屬性

android:visibility
android:alpha
android:elevation
android:rotation
android:rotationX
android:rotationY
android:scaleX
android:scaleY
android:translationX
android:translationY
android:translationZ

MotionLayout 仍有非常多可以應用的。可以看看Google的範例:https://github.com/googlesamples/android-ConstraintLayoutExamples
裡面有MotionLayout結合CoordinatorLayout、viewPager、reveal、fragment等的應用。


上一篇
Day27 MotionLayout
下一篇
Day29 基於物理的動畫:Spring animation、FlingAnimation
系列文
Android animation 30天上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言